<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <!-- 
        1. 函数的4种定义方式
            * 函数声明
            * 函数表达式
            * 构造器
            * 箭头函数


            * 函数声明
                function 函数名( 参数 ){
                    代码块
                }

            * 函数表达式 (匿名函数)
                变量 = function ( 参数 ){
                    代码块
                }

            * 构造器
                变量 = new Function('参数1', '参数2', ...  , '代码块')

            
            * 箭头函数  ES6新增,  有简化, 有隐式返回等功能
                * 变量 = (参数1, 参数2, ...) => { 代码块 }
               
                * 变量 = (参数1, 参数2, ...) => 结果
                  等同于 
                  变量 = (参数1, 参数2, ...) => { return 结果 }
            
            注: 
             * 函数声明后, 是需要调用才会执行
             * 函数表达式不需要再取一个有意义的函数
             * 构造器的参数和代码块 必须是 string类型出现(使用较少)
             * 箭头函数 ES6新增, 简化格式+隐式返回
        
        2. 函数命名规则
            * 由数字, 字母, 下划线组成 (推荐使用 驼峰命名法)
            * 不能以数字开头
            * 不能使用关键字
            * 不建议使用相同的函数名 (函数支持hosting, 调用 和 声明没有先后顺序要求)
     -->

     <script>
        function demo1(){
            console.log('输出这些字');
        }

        demo1();
        console.log('-------------------------');

        //匿名函数
        var x = function(){
            console.log('3月份可能才能开学');
        }

        console.log(x);
        x();
        console.log('---------------------');

        //函数构造器
        
        var x = new Function('n1','n2','console.log(n1+n2);');
        console.log(x);
        x(5,6);

        //箭头函数
        
        var x = (n1, n2) => { console.log(n1+n2) }
        console.log(x);
        x(5,6);
        console.log('-------------------------');

        var x = (n1,n2) => n1+n2;
        var tmp = x(5,6);
        console.log(tmp);
     </script>
</body>
</html>